package deprecated

//import (
//	"bufio"
//	"crypto/tls"
//	"errors"
//	"flag"
//	"fmt"
//	"math/rand"
//	"os"
//	"strconv"
//	"strings"
//	"sync"
//	"time"
//	"ac-julink/tool/sha256"
//)
//
//var paramString_101 string = "{\"id\":101,\"wid\":\"wifiid\",\"ver\":\"9.9.9\"}"
//
//var paramString_901 string = "{\"id\":901,\"token\":\"tokenv\",\"status\":[{\"msgsubtype\":0,\"msgtype\":30,\"result\":\"hAU=\"},{\"msgsubtype\":0,\"msgtype\":102,\"result\":\"9PUBQEkBAP4BAQEBAGYAAQEAIBsdHICAgAAAAAAAAQEBAQIAAAAAAAAAAAAdGSUl+gDkgACAAAAAAAE/AAAAAAAAAAAAAAAAAAAAAIAACA30+w==\"}],\"err\":0}"
//
//var paramString_102 string = "{\"id\":102,\"token\":\"tokenv\"}"
//
//var paramString_103 string = "{\"id\":103,\"token\":\"tokenv\"}"
//
//func main() {
//	featureCode := "865001100010001003000000"
//	encryptKey := "d237cd84fc9419a77199a1fc64f0ce8a"
//	serverAddr := "test-link.hijuconn.com:443"
//	loopNum := 1
//	reqCount := 1000
//	maxSleepInt := 1
//	heartbeat := 30
//	startNum := 0
//	var err error = nil
//	var mode string
//	flag.StringVar(&mode, "m", "0", "0:auto;1:manual")
//	flag.StringVar(&featureCode, "f", "865001100010001003000000", "featureCode")
//	flag.StringVar(&encryptKey, "e", "d237cd84fc9419a77199a1fc64f0ce8a", "encryptKey")
//	flag.StringVar(&serverAddr, "s", "test-link.hijuconn.com:443", "serverAddr")
//	flag.IntVar(&loopNum, "n", 10, "terminal num")
//	flag.IntVar(&reqCount, "c", 1, "req num")
//	flag.IntVar(&maxSleepInt, "t", 30, "sleep time")
//	flag.IntVar(&heartbeat, "hb", 1*60, "heatbeat")
//	flag.IntVar(&startNum, "pos", 100000000000, "start position")
//	flag.Parse()
//	if mode == "1" {
//		reader := bufio.NewReader(os.Stdin)
//		fmt.Println("please input server addr:")
//		serverAddr, _ = reader.ReadString('\n')
//		serverAddr = strings.Replace(strings.Replace(serverAddr, "\n", "", -1), "\r", "", -1)
//		if serverAddr == "" || !strings.Contains(serverAddr, ":") {
//			fmt.Println("server addr is invalid!!!")
//			serverAddr = "test-link.hijuconn.com:443"
//		}
//		fmt.Println("please input featurecode:")
//		featureCode, _ = reader.ReadString('\n')
//		featureCode = strings.Replace(strings.Replace(featureCode, "\n", "", -1), "\r", "", -1)
//		if featureCode == "" {
//			featureCode = "865001100010001003000000"
//		}
//		fmt.Println("please input encrypt key:")
//		encryptKey, _ = reader.ReadString('\n')
//		encryptKey = strings.Replace(strings.Replace(encryptKey, "\n", "", -1), "\r", "", -1)
//		if encryptKey == "" {
//			encryptKey = "d237cd84fc9419a77199a1fc64f0ce8a"
//		}
//
//		fmt.Println("please input terminal num:")
//		terminalNum, _ := reader.ReadString('\n')
//		terminalNum = strings.Replace(strings.Replace(terminalNum, "\n", "", -1), "\r", "", -1)
//		if terminalNum == "" {
//			terminalNum = "10000"
//		}
//		loopNum, err = strconv.Atoi(terminalNum)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%s:%s,%+v", "terminal num is invalid", terminalNum, err))
//			return
//		}
//		fmt.Println("please input request num:")
//		reqNum, _ := reader.ReadString('\n')
//		reqNum = strings.Replace(strings.Replace(reqNum, "\n", "", -1), "\r", "", -1)
//		if reqNum == "" {
//			reqNum = "3600"
//		}
//		reqCount, err = strconv.Atoi(reqNum)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%s:%s,%+v", "req num is invalid", reqNum, err))
//			return
//		}
//		fmt.Println("please input max sleep time:")
//		maxSleep, _ := reader.ReadString('\n')
//		maxSleep = strings.Replace(strings.Replace(maxSleep, "\n", "", -1), "\r", "", -1)
//		if maxSleep == "" {
//			maxSleep = "5"
//		}
//		maxSleepInt, err = strconv.Atoi(maxSleep)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%s:%s,%+v", "max sleep time is invalid", reqNum, err))
//			return
//		}
//	}
//
//	fmt.Println("***************start********************")
//	var waitG *sync.WaitGroup = &sync.WaitGroup{}
//	idPos := 0
//	for i := 1; i <= loopNum; i++ {
//		idPos = startNum + i
//		wifiId := fmt.Sprintf("%s%12d", featureCode, idPos)
//		waitG.Add(i)
//		fmt.Println(fmt.Sprintf("start terminal:%d", i))
//		go terminal(serverAddr, i, reqCount, maxSleepInt, heartbeat, wifiId, encryptKey, waitG)
//		time.Sleep(10 * time.Millisecond)
//	}
//	waitG.Wait()
//	fmt.Println("***************shutdown********************")
//}
//
//func terminal(serverAddr string, num, count, maxSleep, heartbeatSleep int, wifiId, encryptKey string, waitG *sync.WaitGroup) {
//	defer func() {
//		if pErr := recover(); pErr != nil {
//			fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have panic err:%+v", time.Now(), num, wifiId, pErr))
//		}
//	}()
//
//	defer func() {
//		waitG.Done()
//	}()
//	var sendChan chan string = make(chan string, 64)
//	for {
//		conf := &tls.Config{
//
//			InsecureSkipVerify: true,
//		}
//		conn, err := tls.Dial("tcp", serverAddr, conf)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have connect err:%+v", time.Now(), num, wifiId, err))
//			return
//		}
//		bw := bufio.NewWriter(conn)
//		br := bufio.NewReader(conn)
//		token, err := send101Message(bw, br, wifiId, encryptKey)
//		if token == "" {
//			fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 101 err:%+v", time.Now(), num, wifiId, err))
//			return
//		}
//		err = send102Message(token, encryptKey, sendChan)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 102 err:%+v", time.Now(), num, wifiId, err))
//		}
//		err = send103Message(token, encryptKey, sendChan)
//		if err != nil {
//			fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 103 err:%+v", time.Now(), num, wifiId, err))
//		}
//		var isClose bool = true
//		var waitG1 *sync.WaitGroup = &sync.WaitGroup{}
//		waitG1.Add(1)
//		go func() {
//			for {
//				if !isClose {
//					break
//				}
//				err = heartbeat(sendChan)
//				if err != nil {
//					fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 902 err:%+v", time.Now(), num, wifiId, err))
//				}
//				if !isClose {
//					break
//				}
//				time.Sleep(time.Duration(heartbeatSleep) * time.Second)
//			}
//			waitG1.Done()
//		}()
//
//		waitG1.Add(2)
//		go func() {
//			for i := 0; i < count; i++ {
//				err := send901Message(token, encryptKey, sendChan)
//				if err != nil {
//					fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 901 err:%+v", time.Now(), num, wifiId, err))
//				}
//				sleepTime := rand.Intn(maxSleep) + 1
//				time.Sleep(time.Duration(sleepTime) * time.Second)
//			}
//			isClose = true
//			waitG1.Done()
//		}()
//		go func() {
//			for {
//				var mesage string
//				mesage = <-sendChan
//				bw.WriteString(mesage)
//				bw.Flush()
//				if strings.Contains(mesage, "\"id\":902") || strings.Contains(mesage, "\"id\":102") || strings.Contains(mesage, "\"id\":103") {
//					conn.SetReadDeadline(time.Now().Add(5 * time.Second))
//					_, err := br.ReadString('\n')
//					if err != nil {
//						fmt.Println(fmt.Sprintf("%+v=>terminal num:%d,wifiId:%s have 902/102/103 err:%+v", time.Now(), num, wifiId, err))
//					}
//				}
//			}
//		}()
//		waitG1.Wait()
//		fmt.Println(fmt.Sprintf("%+v=>terminal num:%d finished will close and go next", time.Now(), num))
//		conn.Close()
//	}
//}
//
//func send101Message(bw *bufio.Writer, br *bufio.Reader, wifiId, encryptKey string) (string, error) {
//	param := strings.Replace(paramString_101, "wifiid", wifiId, -1)
//	md5Sign, err := sha256.Sha256Encode(encryptKey + param)
//	if err != nil {
//		return "", err
//	}
//	param101 := "HS" + param + md5Sign + "\r\n"
//
//	bw.WriteString(param101)
//	bw.Flush()
//
//	response, err := br.ReadString('\n')
//	if err != nil {
//		return "", err
//	}
//	var token string
//	if strings.Contains(response, "token") {
//		resArray := strings.Split(response, ",")
//		for _, element := range resArray {
//			if strings.Contains(element, "token") {
//				token = strings.Replace(strings.Replace(element, "\"token\":\"", "", -1), "\"", "", -1)
//				if strings.Contains(token, "}") {
//					arr := strings.Split(token, "}")
//					token = arr[0]
//				}
//				break
//			}
//		}
//		return token, nil
//	} else {
//		return "", errors.New("101 response is empty")
//	}
//}
//
//func send901Message(token, encryptKey string, sendChan chan string) error {
//	param := strings.Replace(paramString_901, "tokenv", token, -1)
//	md5Sign, err := sha256.Sha256Encode(encryptKey + param)
//	if err != nil {
//		return err
//	}
//	param901 := "HS" + param + md5Sign + "\r\n"
//	sendChan <- param901
//	return nil
//}
//
//func send102Message(token, encryptKey string, sendChan chan string) error {
//	param := strings.Replace(paramString_102, "tokenv", token, -1)
//	md5Sign, err := sha256.Sha256Encode(encryptKey + param)
//	if err != nil {
//		return err
//	}
//	param102 := "HS" + param + md5Sign + "\r\n"
//	sendChan <- param102
//	return nil
//}
//
//func send103Message(token, encryptKey string, sendChan chan string) error {
//	param := strings.Replace(paramString_103, "tokenv", token, -1)
//	md5Sign, err := sha256.Sha256Encode(encryptKey + param)
//	if err != nil {
//		return err
//	}
//	param103 := "HS" + param + md5Sign + "\r\n"
//	sendChan <- param103
//	return nil
//}
//
//func heartbeat(sendChan chan string) error {
//	sendChan <- "HS{\"id\":902}\r\n"
//	return nil
//}
